package top.stmo.springMVC.test1;

/**
 *    SpringMVC是隶属于Spring框架的一部分，主要是用来进行Web开发，是对Servlet进行了封装
 *
 *
 *    使用步骤：
 *      1.导入springmvc和servlet的jar包
 *      2.使用 @Controller 定义成一个bean
 *      3.通过 @RequestMapping("/user") 设置访问路径
 *      4.通过 @ResponseBody 把返回的数据整体作为响应内容返回
 *      5.设置SpringMVC的配置类并加载，@Configuration @ComponentScan
 *      6.定义servlet容器启动的配置类，加载springMVC和spring的配置，设置那些请求归属springMVC处理
 *        (继承AbstractDispatcherServletInitializer并实现其方法)
 *
 *
 *     @Controller              设定SpringMVC的核心控制器bean
 *     @RequestMapping          设置当前控制器方法请求访问路径
 *     @ResponseBody            设置当前控制器方法响应内容为当前返回值，无需解析
 *
 *    一次性工作
 *        创建工程，设置服务器，加载工程
 *        导入坐标
 *        创建web容器启动类，加载SpringMVC配置，并设置SpringMVC请求拦截路径
 *        SpringMVC核心配置类（设置配置类，扫描controller包，加载Controller控制器bean）
 *     多次工作
 *        定义处理请求的控制器类
 *        定义处理请求的控制器方法，并配置映射路径（@RequestMapping）与返回json数据（@ResponseBody）
 *
 *   -------------------------------springMVC工作流程----------------------------------
 *
 *    启动服务器初始化过程
 *      1.服务器启动，执行ServletContainersInitConfig类，初始化web容器
 *      2. 执行createServletApplicationContext方法，创建了WebApplicationContext对象
 *      3. 加载SpringMvcConfig配置类
 *      4. 执行@ComponentScan加载对应的bean
 *      5. 加载UserController，每个@RequestMapping的名称对应一个具体的方法
 *      6. 执行getServletMappings方法，定义所有请求都通过springMVC
 *
 *   单次请求过程
 *      1. 发送请求http://localhost/save
 *      2. web容器发现该请求满足SpringMVC拦截规则，将请求交给SpringMVC处理
 *      3. 解析请求路径/save
 *      4. 由/save匹配执行对应的方法save(）
 *          上面的第五步已经将请求路径和方法建立了对应关系，通过/save就能找到对应的save方法
 *      5. 执行save()
 *      6. 检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方
 *
 *   -------------------------------springMVC工作流程----------------------------------
 *
 *   因为功能不同，如何避免Spring错误加载到SpringMVC的bean?
 *
 *   加载Spring控制的bean的时候排除掉SpringMVC控制的bean
 *
 *   方式一:Spring加载的bean设定扫描范围为精准范围，例如service包、dao包等
 *   方式二:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包中的bean
 *
 *   -------------------------------springMVC中文字符乱码问题---------------------------
 *
 *   servlet容器启动的配置类中重写 getServletFilters() 方法并设置编码集
 *
 */
public class App1 {
}
